#include <iostream>
#include <zlib/eventsystem/I_EventSystem.h>

using namespace std;

/*
测试Continuation类是否可以按照如期执行.该测试用例并非Continuation的真实用法规范
仅仅用于当前阶段测试.
假如main函数为一个线程,其不需要关心,Continuation到底运行到哪了.只需要调用状态机的handleEvent接口,即可驱动任务完成.
但是注意:在main函数中是手动调用了三次,也就意味着main函数中是知道Continuation的执行状态机的(知道其通过三步执行完毕)
真实场景:
work线程上有一个队列,它会循环遍历这个队列.如果有任务就取出来,调用它的Continuation接口.
而TestContinuation在step1完成之后,它自己知道自己的任务没有完成,则需要调用work线程对应对应的入队接口,放入队列中
work线程遍历队列会再次将其取出,然后调用其handleEvent接口.

要求:
所有的Task都必须继承Continuation.
Task需要被放入work线程的任务队列之前先指定其回调函数.也就是step1.
*/


class TestContinuation : public Continuation{
public:
	int step1(int event, void *data)
	{
		cout << "step1" << endl;
		SET_HANDLER(&TestContinuation::step2);
	}

	int step2(int event, void *data)
	{
		cout << "step2" << endl;
		SET_HANDLER(&TestContinuation::step3);
	}

	int step3(int event, void *data)
	{
		cout << "step3" << endl;
		delete this;
	}

	TestContinuation()
	{
		cout << "construct function" << endl;
		SET_HANDLER(&TestContinuation::step1);
	}

	~TestContinuation()
	{
		cout << "destruct function" << endl;
	}
};

int main()
{
	TestContinuation *t = new TestContinuation;
	t->handleEvent();
	t->handleEvent();
	t->handleEvent();
}
